package com.lmxdawn.api.admin.controller.file;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.UUID;
import com.lmxdawn.api.admin.entity.FileResource;
import com.lmxdawn.api.admin.service.IFileResourceService;
import com.lmxdawn.api.common.res.BaseResponse;
import com.lmxdawn.api.common.util.ResultVOUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * 上传相关
 */
@RestController
@RequestMapping("/admin/file/upload")
public class UploadController {

    @Resource
    IFileResourceService fileResourceService;
    /**
     * 上传的token
     * @return
     */
    @GetMapping("/qiuNiuUpToken")
    public BaseResponse qiuNiuUpToken() {

        // TODO 这里接入 七牛云 的SDK 就可以了
        Map<String, Object> res = new HashMap<>();
        res.put("uploadUrl", "/admin/file/upload/createFile"); // 这里可以直接设置成七牛云的上传 url，不用服务端这边去post请求七牛云的上传接口
        res.put("upToken", "xxxxxxx");

        return ResultVOUtils.success(res);
    }


    /**
     * 上传文件（如果是接入的第三方的建议这个接口废弃）
     * @return
     */
    @PostMapping("/createFile")
    public BaseResponse createFile(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {

        // TODO 这里做上传文件的逻辑，返回文件的 key （也就是路径）

        String uuid = UUID.fastUUID().toString();
        String ext = Objects.requireNonNull(file.getOriginalFilename()).substring(file.getOriginalFilename().lastIndexOf("."));
        String target = "/pages/" + uuid + ext;
        checkDir();
        FileUtil.writeBytes(file.getBytes(), (this.getClass().getResource("/") + target));
        FileResource resource = new FileResource();
        resource.setTagId(0);
        resource.setCreateTime(new Date());
        resource.setExt(ext.substring(1));
        resource.setFilename(file.getOriginalFilename());
        resource.setSize((int) file.getSize());
        resource.setType((byte) 0);
        resource.setPath(target);
        fileResourceService.save(resource);

        Map<String, Object> res = new HashMap<>();
        res.put("key", target);
        return ResultVOUtils.success(res);
    }

    private void checkDir() {
        if(FileUtil.exist(this.getClass().getResource("/") + "/pages/")){
            return;
        }
        FileUtil.mkdir(this.getClass().getResource("/") + "/pages/");
    }

}
